package testes;

import java.util.ArrayList;
import java.util.List;


import logica.veiculo.Acessorio;
import logica.veiculo.Automovel;
import logica.veiculo.Veiculo;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;


public class TestaVeiculo {
	private Veiculo novoVeiculo;
	private List<Acessorio> acessorios;
		
	@Before public void criaVeiculo() throws Exception {
		acessorios = new ArrayList<Acessorio>();
		acessorios.add(Acessorio.ABS);
		
		novoVeiculo = new Automovel();
		novoVeiculo.setAcessorios(acessorios);
	}

	@Test public void testaConstrutor() {
		try {
		
			novoVeiculo.setRenavam(null) ;
			
			Assert.fail("Deveria ter apresentado erro de \n\t<RENAVAM invalido!>");
		} 
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de RENAVAM nulo", "\n\t<RENAVAM invalido!>", e.getMessage());
		}
		
		
		
		try {
			
			novoVeiculo.setRenavam("   ");
			Assert.fail();
		} 
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de RENAVAM vazio", "\n\t<RENAVAM invalido!>", e.getMessage());
		}
		
	
		
		try {
		
			novoVeiculo.setRenavam("12a45"); 
			Assert.fail("Deveria ter apresentado erro de RENAVAM invalido");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de RENAVAM invalido", "\n\t<RENAVAM invalido!>", e.getMessage());
		}
		
		
		
		try {
			novoVeiculo.setModelo(null);
			Assert.fail("Deveria ter apresentado erro de modelo invalido.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Modelo nulo", "\n\t <Modelo invalido!>", e.getMessage());
		}
		
		
		
		try {
			novoVeiculo.setModelo("    ");
			Assert.fail("Deveria ter apresentado erro de modelo invalido.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Modelo vazio", "\n\t <Modelo invalido!>", e.getMessage());
		}
				
		try {
			novoVeiculo.setModelo("55");
			Assert.fail("Deveria ter apresentado erro de modelo invalida.");
		} 
		
		catch (Exception e) {
			
			Assert.assertEquals("Deveria ter apresentado erro de Modelo nula", "\n\t <Modelo invalido!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setMarca(null);
			Assert.fail("Deveria ter apresentado erro de marca invalido.");
		} 
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Marca vazia", "\n\t <Marca invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setMarca("    ");
			Assert.fail("Deveria ter apresentado erro de marca invalido.");
		} 
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Marca vazia", "\n\t <Marca invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setAno(-1000);
			Assert.fail("Deveria ter apresentado erro de ano de fabricacao invalido.");
		} 
		
		catch (Exception e) {
			
			Assert.assertEquals("Deveria ter apresentado erro de ano de fabricacao negativo", "\n \t <Ano invalido!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setPotencia(-50);
			Assert.fail("Deveria ter apresentado erro de potencia invalida.");
		} 
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de potencia negativa", "\n \t <Potencia invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setPotencia(0);
			Assert.fail("Deveria ter apresentado erro de potencia invalida.");
		} 
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de potencia igual a 0", "\n \t <Potencia invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setDataDeAquisicao(null);
			Assert.fail("Deveria ter apresentado erro de Data invalida.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Data nula", "\n \t <Data de aquisicao invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setTipoDePotencia(null);
			Assert.fail("Deveria ter apresentado erro de Tipo de potencia invalido.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Tipo de potencia nulo", "\n \t <Tipo de Potencia invalido!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setTipoDeCombustivel(null);
			Assert.fail("Deveria ter apresentado erro de Tipo de Combustivel invalida.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Tipo de Combustivel nula", "\n \t <Tipo de combustivel invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setCor(null);
			Assert.fail("Deveria ter apresentado erro de Cor invalida.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Cor nula", "\n \t <Cor invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setAcessorios(null);
			Assert.fail("Deveria ter apresentado erro de Acessorios invalidos.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Acessorios nulo", "\n \t <Acessorios invalidos!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setEstado(null);
			Assert.fail("Deveria ter apresentado erro de Estado invalido.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Estado nulo", "\n \t <Estado invalido!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setNivelDoTanque(-10);
			Assert.fail("Deveria ter apresentado erro de Nivel do tanque invalido.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Nivel do tanque igual a 0", "\n \t <Nivel do tanque invalido!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setPlaca(null);
			Assert.fail("Deveria ter apresentado erro de Placa invalida.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Placa nula", "\n \t <Placa invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setPlaca("");
			Assert.fail("Deveria ter apresentado erro de Placa invalida.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Placa vazia", "\n \t <Placa invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setPlaca("LLl-1234");
			Assert.fail("Deveria ter apresentado erro de Placa invalida.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Placa fora do padrao", "\n \t <Placa invalida!>", e.getMessage());
		}
		
		try {
			novoVeiculo.setPlaca("LLL1-234");
			Assert.fail("Deveria ter apresentado erro de Placa invalida.");
		}
		
		catch (Exception e) {
			Assert.assertEquals("Deveria ter apresentado erro de Placa fora do padrao", "\n \t <Placa invalida!>", e.getMessage());
		}
		
		
	}
	
}